package fumec.br.ia.search;

import java.util.ArrayList;

public class Estado implements IEstado{
	private Integer atual;
	private Problema problema;
	
	public Estado(Problema problema){
		this.problema = problema;
		this.atual = problema.getOrigem();
	};

	public Estado(Problema problema, Integer atual){
		this.problema = problema;
		this.atual = atual;
	};
	
	public Integer getAtual(){
		return atual;
	}
	
	@Override
	public ArrayList<IAcao> acoesValidas() {
		ArrayList<IAcao> acoes = new ArrayList<IAcao>();
		
		for(int i = 0; i < this.problema.getPontos(); i++){
			double custo = this.problema.getCusto(this.atual, i);
					
			if(custo > 0.0){
				acoes.add(new Acao(custo, i));	
			}
		};
		
		return acoes;
	}

	@Override
	public IEstado executa(IAcao acao) {
		return new Estado(this.problema, acao.getDestino());
	}

	@Override
	public Boolean isObjetivo() {
		return this.problema.getDestino().equals(this.atual);
	}

	@Override
	public Double eval() {
		return this.problema.getCusto(this.atual, this.problema.getDestino());
	}
}